package com.ruoyi.web.controller.proposals;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.proposals.domain.ProComment;
import com.ruoyi.proposals.domain.ProFavorite;
import com.ruoyi.proposals.domain.ProProposals;
import com.ruoyi.proposals.domain.ProUser;
import com.ruoyi.proposals.service.ProProposalsService;
import com.ruoyi.proposals.service.ProUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 提案用户管理
 *
 * 1. 提案用户的来源都是小程序上登录后获取小程序用户名和openid所得
 * 2. 提案用户表只存储小程序传过来用户名和openid，其他信息可以再次提供参数补充，例如：性别，生日，地址等
 * 3. 用户可以查阅自己发布的提案,收藏的提案以及互动消息
 * 4. 用户可以点击收藏，评论，已发布得体案简略版本跳到详情页面
 * 5. 用户可以编辑自己的信息
 */
@Api(tags = "提案用户管理")
@RestController
@RequestMapping("/wx/proposalsUser")
public class ProProposalsUserController extends BaseController {

    @Autowired
    private ProProposalsService proposalsService;

    @Autowired
    private ProUserService proUserService;

    /**
     * 小程序登录后同步用户信息
     */
    @ApiOperation("小程序登录后同步用户信息")
    @PostMapping("/sync")
    public AjaxResult sync(@RequestBody ProUser user) {
        proUserService.sync(user);
        return AjaxResult.success("同步成功");
    }

    /**
     * 获取提案用户的提案列表 ok
     * @param proposals
     * @return
     */
    @ApiOperation("获取提案用户的提案列表")
    @PostMapping("/list")
    public TableDataInfo list(@RequestBody ProProposals proposals) {
        startPage();
        List<ProProposals> list = proposalsService.selectByUserId(proposals);
        return getDataTable(list);
    }

    /**
     * 获取用户收藏的提案列表-ok
     */
    @ApiOperation("获取用户收藏的提案列表")
    @GetMapping("/favorites/{userId}")
    public TableDataInfo getFavorites(@PathVariable Long userId) {
        startPage();
        List<ProProposals> favorites = proposalsService.getFavoritesByUserId(userId);
        return getDataTable(favorites);
    }

    /**
     * 编辑用户信息
     */
    @ApiOperation("编辑用户信息-性别，生日，地址")
    @PutMapping("/update")
    public AjaxResult updateUserInfo(@RequestBody ProUser user) {
        proUserService.updateUserInfo(user);
        return AjaxResult.success("用户信息更新成功");
    }

    /**
     * 查看提案详情 ok
     */
    @ApiOperation("查看提案详情")
    @GetMapping("/proposal/{proposalId}")
    public AjaxResult getProposalDetail(@PathVariable Long proposalId) {
        ProProposals proposal = proposalsService.getProposalDetail(proposalId);
        return AjaxResult.success(proposal);
    }

    /**
     * 收藏提案 ok
     */
    @ApiOperation("收藏提案")
    @PostMapping("/userFavorite")
    public AjaxResult favoriteProposal(@RequestBody ProFavorite proFavorite ) {
        boolean success = proposalsService.favoriteProposal(proFavorite);
        if (success) {
            return AjaxResult.success("提案收藏成功");
        } else {
            return AjaxResult.error("提案收藏失败");
        }
    }

    /**
     * 评论提案 ok
     */
    @ApiOperation("评论提案")
    @PostMapping("/comment")
    public AjaxResult commentProposal(@RequestBody ProComment proComment) {
        boolean success = proposalsService.commentProposal(proComment);
        if (success) {
            return AjaxResult.success("评论提交成功");
        } else {
            return AjaxResult.error("评论提交失败");
        }
    }


    /**
     * 获取用户互动消息
     */
    @ApiOperation("获取用户互动消息")
    @GetMapping("/messages")
    public AjaxResult getMessages(@RequestParam Long userId) {
        // List<Message> messages = proUserService.getMessagesByUserId(userId);
        return AjaxResult.success("ok");
    }

}
